<template>
  <div>
    <div class="container-fluid">
      <el-row class="spannel_list" >
        <el-col :sm="6" :xs="12">
          <div class="spannel">
            <div class="left">
              <em>10015</em>
              <b>总文章数</b>
            </div>
            <div class="right">
              <img src="./assets/文章总数@2x.png" alt="">
            </div>
          </div>
        </el-col>
        <el-col :sm="6" :xs="12">
          <div class="spannel ">
            <div class="left">
              <em>123</em>
              <b>日新增文章数</b>
            </div>
            <div class="right">
              <img src="./assets/文章@2x.png" alt="">
            </div>
          </div>
        </el-col>
        <el-col :sm="6" :xs="12">
          <div class="spannel">
            <div class="left">
              <em>35</em>
              <b>评论总数</b>
            </div>
            <div class="right">
              <img src="./assets/评论总数@2x.png" alt="">
            </div>
          </div>
        </el-col>
        <el-col :sm="6" :xs="12">
          <div class="spannel ">
            <div class="left">
              <em>123</em>
              <b>日新增评论数</b>
            </div>
            <div class="right">
              <img src="./assets/日增评论@2x.png" alt="">
            </div>
          </div>
        </el-col>
      </el-row>
    </div>

    <div class="container-fluid" >
      <el-row class="curve-pie" :gutter="10">
        <el-col :sm="16" :xs="16">
          <div class="gragh_pannel" id="curve_show"></div>
        </el-col>
        <el-col :sm="8" :xs="8">
          <div class="gragh_pannel" id="pie_show"></div>
        </el-col>
      </el-row>
    </div>

    <div class="container-fluid">
      <div class="column_pannel" id="column_show"></div>
    </div>
  </div>
</template>

<script>
// 模块内用命名导出的, 我把他们再收集起来形成对象, 放到echrats变量里
import * as echarts from 'echarts'
export default {
  name: 'my-home',
  mounted () {
    // 面积图
    this.setCurveChartFn()
    // 饼状图
    this.picChartFn()
    // 柱状图
    this.columnChartFn()
  },
  methods: {
    // 设置面积图
    setCurveChartFn () {
      // 基于准备好的dom，初始化echarts实例
      const curveChart = echarts.init(document.getElementById('curve_show'))
      // 绘制面积图表
      // 数据源(模拟后台返回的数据)
      const aListAll = [
        { count: 36, date: '2022-04-13' },
        { count: 52, date: '2022-04-14' },
        { count: 78, date: '2022-04-15' },
        { count: 85, date: '2022-04-16' },
        { count: 65, date: '2022-04-17' },
        { count: 72, date: '2022-04-18' },
        { count: 88, date: '2022-04-19' },
        { count: 64, date: '2022-04-20' },
        { count: 72, date: '2022-04-21' },
        { count: 90, date: '2022-04-22' },
        { count: 96, date: '2022-04-23' },
        { count: 100, date: '2022-04-24' },
        { count: 102, date: '2022-04-25' },
        { count: 110, date: '2022-04-26' },
        { count: 123, date: '2022-04-27' },
        { count: 100, date: '2022-04-28' },
        { count: 132, date: '2022-04-29' },
        { count: 146, date: '2022-04-30' },
        { count: 200, date: '2022-05-01' },
        { count: 180, date: '2022-05-02' },
        { count: 163, date: '2022-05-03' },
        { count: 110, date: '2022-05-04' },
        { count: 80, date: '2022-05-05' },
        { count: 82, date: '2022-05-06' },
        { count: 70, date: '2022-05-07' },
        { count: 65, date: '2022-05-08' },
        { count: 54, date: '2022-05-09' },
        { count: 40, date: '2022-05-10' },
        { count: 45, date: '2022-05-11' },
        { count: 38, date: '2022-05-12' }
      ]

      // 但是图标要求直接给数字的值, 所以要把对象的值取出来形成2个只有值的数组
      const aCount = []
      const aDate = []

      for (let i = 0; i < aListAll.length; i++) {
        aCount.push(aListAll[i].count)
        aDate.push(aListAll[i].date)
      }

      // 面积图的echarts配置项(参考文档复制)
      const chartopt = {
        title: {
          text: '月新增文章数', // 标题
          left: '30', // 位置居中
          top: '28', // 标题距离容器顶部px
          textStyle: {
            fontSize: 16
          }
        },
        tooltip: { // 提示框组件
          trigger: 'axis' // 坐标轴触发(鼠标放在坐标轴就能出提示框)
        },
        toolbox: { // 工具栏
          show: true, // 要显示
          feature: { // 各工具配置项
            mark: { show: true }, // 辅助线开关
            dataView: { show: true, readOnly: false }, // 数据视图工具，可以展现当前图表所用的数据，编辑后可以动态更新。
            magicType: { show: true, type: ['line', 'bar'] }, // 动态类型切换
            restore: { show: true }, // 配置项还原
            saveAsImage: { show: true } // 点击保存下载图片
          }
        },
        xAxis: [ // 水平轴显示
          {
            type: 'category',
            axisLine: { show: false }, // 不显示 x 轴线
            splitLine: { show: false }, // 不显示分隔线
            axisTick: { show: false }, // 不显示刻度标记
            boundaryGap: false, // 坐标轴两边留白策略 (不留白)
            data: aDate, // 水平轴上的数字数据 (时间)
            axisLabel: {
              margin: 30 // 调整这个值来增加或减少距离
            }
          }
        ],
        yAxis: [ // 垂直轴显示
          {
            type: 'value', // 以series里的data值做划分段
            splitLine: {
              show: true,
              lineStyle: {
                type: 'dashed'
              }
            }
          }
        ],
        series: [ // 系列(控制图表类型和数据)
          {
            name: '新增文章',
            type: 'line', // 折线图
            smooth: true, // 是否平滑视觉引导线，默认不平滑，可以设置成 true 平滑显示
            symbolSize: 5,
            symbol: 'circle',
            itemStyle: {
            }, // 折线拐点标志的样式。
            lineStyle: {
              color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
                { offset: 0, color: 'rgb(157, 236, 225)' },
                { offset: 1, color: 'rgb(100, 111, 235)' }
              ])
            },
            areaStyle: { // 区域填充样式。设置后显示成区域面积图。
              color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
                { offset: 0, color: 'rgba(157, 236, 225,0.3)' },
                { offset: 1, color: 'rgba(100, 111, 235,0.3)' }
              ])
            },
            data: aCount // 真正数据源(用下标和x轴数组对应)
          }
        ],
        grid: { // 直角坐标系内绘图网格
          x: 50, // grid 组件离容器偏移量, 左侧
          x2: 50, // 右侧
          y: 80, // 上
          height: 220 // 高度
        }
      }

      curveChart.setOption(chartopt)
    },
    // 设置饼状图
    picChartFn () {
      const oPie = echarts.init(document.getElementById('pie_show'))
      const oPieopt = {
        title: {
          top: 20,
          text: '分类文章数量比',
          x: '24'
        },
        tooltip: {
          trigger: 'item', // 在图形上才会触发提示
          formatter: '{a} <br/>{b} : {c} ({d}%)' // 提示的文字显示的格式
          // a: 系列名
          // b: 数据名
          // c: 数值
          // d: 百分比 (只有饼状图生效)
        },
        color: ['#7DBFFF', '#5482FA ', '#586EE6 ', '#68DEB3'], // 系列颜色
        legend: { // 图例组件
          x: 'center',
          bottom: 65,
          orient: 'vertical',
          formatter: function (name) {
            const data = oPieopt.series[0].data
            let total = 0
            let tarValue
            for (let i = 0; i < data.length; i++) {
              total += data[i].value
              if (data[i].name === name) {
                tarValue = data[i].value
              }
            }
            const p = Math.round(((tarValue / total) * 100))
            return `${name}                             ${p}%`
          },
          textStyle: {
            fontSize: 14,
            padding: [0, 8]
          },
          data: ['奇趣事', '会生活', '爱旅行', '趣美味'] // 每个部分对应的数据名(要和series里name对应)
        },
        toolbox: { // 工具箱
          show: true,
          x: 'center',
          bottom: 20,
          feature: { // 各工具配置项
            mark: { show: true }, // 辅助线开关
            dataView: { show: true, readOnly: false }, // 数据视图工具，可以展现当前图表所用的数据，编辑后可以动态更新。
            magicType: { show: true, type: ['line', 'bar'] }, // 动态类型切换
            restore: { show: true }, // 配置项还原
            saveAsImage: { show: true } // 点击保存下载图片
          }
        },
        series: [
          {
            name: '访问来源',
            type: 'pie',
            radius: ['30%', '40%'],
            center: ['50%', '35%'],
            itemStyle: {
              borderRadius: 4,
              borderColor: '#fff',
              borderWidth: 2
            },
            labelLine: {
              show: false
            },
            label: {
              show: false,
              position: 'center'
            },
            data: [
              { value: 300, name: '奇趣事' },
              { value: 100, name: '会生活' },
              { value: 260, name: '爱旅行' },
              { value: 180, name: '趣美味' }
            ]
          }
        ]
      }
      oPie.setOption(oPieopt)
    },
    // 设置底部柱状图
    columnChartFn () {
      const oColumn = echarts.init(document.getElementById('column_show'))
      const oColumnopt = {
        title: {
          text: '文章访问量',
          left: '24',
          top: '20'
        },
        tooltip: {
          trigger: 'axis'
        },
        legend: {
          data: ['奇趣事', '会生活', '爱旅行', '趣美味'],
          top: '56',
          left: '26'
        },
        toolbox: {
          show: true,
          top: 24,
          right: 40,
          feature: {
            mark: { show: true },
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ['line', 'bar'] },
            restore: { show: true },
            saveAsImage: { show: true }
          }
        },
        xAxis: [
          {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月'],
            // x轴文字颜色
            axisLabel: {
              color: '#A1A7C4'
            },
            // x轴线条样式
            axisLine: {
              lineStyle: {
                color: '#D9E1EC'
              }
            }
          }
        ],
        yAxis: [
          {
            type: 'value',
            splitLine: {
              lineStyle: {
                // 使用深浅的间隔色
                type: 'dashed'
              }
            },
            axisLabel: {
              color: '#A1A7C4'
            }
          }
        ],
        series: [
          {
            name: '奇趣事',
            type: 'bar',
            barWidth: 20,
            areaStyle: { type: 'default' },
            itemStyle: {
              color: '#7DBFFF',
              barBorderRadius: [5, 5, 0, 0]
            },
            data: [800, 708, 920, 1090, 1200]
          },
          {
            name: '会生活',
            type: 'bar',
            barWidth: 20,
            areaStyle: { type: 'default' },
            itemStyle: {
              color: '#5482FA',
              barBorderRadius: [5, 5, 0, 0]
            },
            data: [400, 468, 520, 690, 800]
          },
          {
            name: '爱旅行',
            type: 'bar',
            barWidth: 20,
            areaStyle: { type: 'default' },
            itemStyle: {
              color: '#586EE6',
              barBorderRadius: [5, 5, 0, 0]
            },
            data: [500, 668, 520, 790, 900]
          },
          {
            name: '趣美味',
            type: 'bar',
            barWidth: 20,
            areaStyle: { type: 'default' },
            itemStyle: {
              color: '#68DEB3',
              barBorderRadius: [5, 5, 0, 0]
            },
            data: [600, 508, 720, 890, 1000]
          }
        ],
        grid: {
          show: false,
          x: 70,
          x2: 30,
          y: 100,
          height: 260
        },
        dataZoom: [ // 给x轴设置滚动条
          {
            start: 0, // 默认为0
            end: 100 - 1000 / 31, // 默认为100
            type: 'slider',
            show: true,
            xAxisIndex: [0],
            handleSize: 0, // 滑动条的 左右2个滑动条的大小
            height: 8, // 组件高度
            left: 45, // 左边的距离
            right: 50, // 右边的距离
            bottom: 26, // 右边的距离
            handleColor: '#ddd', // h滑动图标的颜色
            handleStyle: {
              borderColor: '#cacaca',
              borderWidth: '1',
              shadowBlur: 2,
              background: '#ddd',
              shadowColor: '#ddd'
            }
          }
        ]
      }
      oColumn.setOption(oColumnopt)
    }

    // // 设置饼状图
    // picChartFn () {
    //   const oPie = echarts.init(document.getElementById('pie_show'))
    //   const oPieopt = {
    //     title: {
    //       top: 28,
    //       left: 30,
    //       text: '分类文章数量比'
    //     },
    //     tooltip: {
    //       trigger: 'item', // 在图形上才会触发提示
    //       formatter: '{a} <br/>{b} : {c} ({d}%)' // 提示的文字显示的格式
    //       // a: 系列名
    //       // b: 数据名
    //       // c: 数值
    //       // d: 百分比 (只有饼状图生效)
    //     },
    //     color: ['#5885e8', '#13cfd5', '#00ce68', '#ff9565'], // 系列颜色
    //     legend: { // 图例组件
    //       left: '15',
    //       itemWidth: '14',
    //       itemHeight: '14',
    //       borderWidth: '1',
    //       bottom: '65',
    //       orient: 'vertical',
    //       align: 'left',
    //       data: ['奇趣事', '会生活', '爱旅行', '趣美味'] // 每个部分对应的数据名(要和series里name对应)
    //     },
    //     toolbox: { // 工具箱
    //       show: true,
    //       x: 'center',
    //       top: 374,
    //       feature: {
    //         mark: { show: true },
    //         dataView: { show: true, readOnly: false },
    //         magicType: {
    //           show: true,
    //           type: ['pie', 'funnel'],
    //           option: {
    //             funnel: {
    //               x: '25%',
    //               width: '50%',
    //               funnelAlign: 'left',
    //               max: 1548
    //             }
    //           }
    //         },
    //         restore: { show: true },
    //         saveAsImage: { show: true }
    //       }
    //     },
    //     series: [
    //       {
    //         name: '访问来源',
    //         type: 'pie',
    //         radius: ['38', '68'],
    //         center: ['40%', '30%'],
    //         itemStyle: {
    //           borderRadius: 1,
    //           borderColor: '#fff',
    //           borderWidth: 2
    //         },
    //         labelLine: {
    //           show: false
    //         },
    //         label: {
    //           show: false,
    //           position: 'center'
    //         },
    //         data: [
    //           { value: 300, name: '奇趣事' },
    //           { value: 100, name: '会生活' },
    //           { value: 260, name: '爱旅行' },
    //           { value: 180, name: '趣美味' }
    //         ]
    //       }
    //     ]
    //   }
    //   oPie.setOption(oPieopt)
    // },
    // // 设置底部柱状图
    // columnChartFn () {
    //   const oColumn = echarts.init(document.getElementById('column_show'))
    //   const oColumnopt = {
    //     title: {
    //       text: '文章访问量',
    //       top: '10',
    //       left: '10'
    //     },
    //     tooltip: {
    //       trigger: 'axis'
    //     },
    //     legend: {
    //       left: '10',
    //       data: ['奇趣事', '会生活', '爱旅行', '趣美味'],
    //       top: '40'
    //     },
    //     toolbox: {
    //       show: true,
    //       feature: {
    //         mark: { show: true },
    //         dataView: { show: true, readOnly: false },
    //         magicType: { show: true, type: ['line', 'bar'] },
    //         restore: { show: true },
    //         saveAsImage: { show: true }
    //       }
    //     },
    //     xAxis: [
    //       {
    //         type: 'category',
    //         data: ['1月', '2月', '3月', '4月', '5月'],
    //         axisLine: { show: false }, // 不显示 x 轴线
    //         splitLine: { show: false }, // 不显示分隔线
    //         axisTick: { show: false }, // 不显示刻度标记
    //         // boundaryGap: false, // 坐标轴两边留白策略 (不留白)
    //         axisLabel: {
    //           margin: 30 // 调整这个值来增加或减少距离
    //         }
    //       }
    //     ],
    //     yAxis: [
    //       {
    //         axisLine: { show: false }, // 不显示 y 轴线
    //         type: 'value'
    //       }
    //     ],
    //     borderWidth: '0', // 图表边框宽度
    //     series: [
    //       {
    //         name: '奇趣事',
    //         type: 'bar',
    //         barWidth: 20,
    //         areaStyle: { type: 'default' },
    //         itemStyle: {
    //           color: '#fd956a'
    //         },
    //         data: [800, 708, 920, 1090, 1200]
    //       },
    //       {
    //         name: '会生活',
    //         type: 'bar',
    //         barWidth: 20,
    //         areaStyle: { type: 'default' },
    //         itemStyle: {
    //           color: '#2bb6db'
    //         },
    //         data: [400, 468, 520, 690, 800]
    //       },
    //       {
    //         name: '爱旅行',
    //         type: 'bar',
    //         barWidth: 20,
    //         areaStyle: { type: 'default' },
    //         itemStyle: {
    //           color: '#13cfd5'
    //         },
    //         data: [500, 668, 520, 790, 900]
    //       },
    //       {
    //         name: '趣美味',
    //         type: 'bar',
    //         barWidth: 20,
    //         areaStyle: { type: 'default' },
    //         itemStyle: {
    //           color: '#00ce68'
    //         },
    //         data: [600, 508, 720, 890, 1000]
    //       }
    //     ],
    //     grid: {
    //       show: true,
    //       x: 50,
    //       x2: 30,
    //       y: 80,
    //       height: 260
    //     },
    //     dataZoom: [ // 给x轴设置滚动条
    //       {
    //         start: 0, // 默认为0
    //         end: 100 - 1000 / 31, // 默认为100
    //         type: 'slider',
    //         show: true,
    //         xAxisIndex: [0],
    //         handleSize: 0, // 滑动条的 左右2个滑动条的大小
    //         height: 8, // 组件高度
    //         left: 45, // 左边的距离
    //         right: 50, // 右边的距离
    //         bottom: 26, // 右边的距离
    //         handleColor: '#ddd', // h滑动图标的颜色
    //         handleStyle: {
    //           borderColor: '#cacaca',
    //           borderWidth: '1',
    //           shadowBlur: 2,
    //           background: '#ddd',
    //           shadowColor: '#ddd'
    //         }
    //       }
    //     ]
    //   }
    //   oColumn.setOption(oColumnopt)
    // }
  }
}
</script>

<style lang="scss" scoped>
.spannel_list {
  margin: 20px 0;
  padding: 20px 0;
  height: 120px;
  width: 1126px;
  background-color: #fff;
  margin-bottom: 20px;
  .spannel {
    display: flex;
    justify-content: space-between;
    border-right: 1px solid #d7dbec;
    padding:20px 40px;
    height: 80px;
    overflow: hidden;
    position: relative;
    background-color: #fff;
    .left{
      em {
        display:block;
        font-style: normal;
        color: #131523 ;
        font-size:25px;
        line-height: 28px;
        font-family: 'Arial';
      }
      b {
        display: block;
        color: #5A607F;
        font-size: 14px;
      }
    }
    .right{
      position: relative;
      width: 56px;
      height:56px;
      background-color: #ECF2FE;
      border-radius: 50%;
      img{
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
        width: 24px;
        height:24px;
      }
    }
  }
  .el-col:last-child .spannel{
    border-right:0;
  }
}

// .scolor01 em,
// .scolor01 span {
//   color: #6ac6e2;
// }

// .scolor02 em,
// .scolor02 span {
//   color: #5fd9de;
// }

// .scolor03 em,
// .scolor03 span {
//   color: #58d88e;
// }

.gragh_pannel {
  height: 418px;
  border: 1px solid #e7e7e9;
  background-color: #fff !important;
  margin-bottom: 20px;
}

.column_pannel {
  margin-bottom: 20px;
  height: 418px;
  border: 1px solid #e7e7e9;
  background-color: #fff !important;
}
</style>
